/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Serveur;

import exception.CommunicationException;
import exception.ReadingObjectException;
import exception.ChoiceException;
import exception.CommunicationResponseException;
import librairie.InterfaceTransport;
import librairie.Message;
import librairie.StructureProtocole;
import librairie.Transport;

/**
 *
 * @author Florian Minin & Khémon Beh
 */
public class ProtocoleServeur implements InterfaceProtocoleServeur {

    private InterfaceTransport t;
    private Message m;

    public ProtocoleServeur(InterfaceTransport _t) {
        t = _t;
    }

    public void envoyerResultat(double resultat) throws CommunicationResponseException {
        try {
            Message result = new Message();
            result.ajouterParametre(StructureProtocole.CODE_RETOUR, StructureProtocole.TRAITEMENT_OK);
            result.ajouterParametre(StructureProtocole.RESULTAT, resultat);
            t.envoyer(result);
        } catch (CommunicationException ce) {
            throw new CommunicationResponseException();
        }
    }

    public void recevoirMessage() throws CommunicationResponseException, ReadingObjectException {
        try {
            t.connecter();
            m = (Message) t.recevoir();
        } catch (CommunicationException ce) {
            throw new CommunicationResponseException();
        }
    }

    public String choixFonction() throws ChoiceException {
        String calcul = "";
        switch ((Integer) m.recupererParametre(StructureProtocole.CHOIX)) {
            case 1:
                calcul = "annee";
                break;
            case 2:
                calcul = "annuite";
                break;
            default:
                throw new ChoiceException();
        }
        return calcul;
    }

    public Object getParametre(String cle) {
        return m.recupererParametre(cle);
    }

    public void envoyerErreurMontant() throws CommunicationResponseException {
        try {
            Message erreur = new Message();
            erreur.ajouterParametre(StructureProtocole.CODE_RETOUR, StructureProtocole.ERREUR_MONTANT);
            t.connecter();
            t.envoyer(erreur);
        } catch (CommunicationException ce) {
            throw new CommunicationResponseException();
        }
    }

    public void envoyerErreurNbAn() throws CommunicationResponseException {
        try {
            Message erreur = new Message();
            erreur.ajouterParametre(StructureProtocole.CODE_RETOUR, StructureProtocole.ERREUR_NBAN);
            t.envoyer(erreur);
        } catch (CommunicationException ce) {
            throw new CommunicationResponseException();
        }
    }

    public void envoyerErreurTxInteret() throws CommunicationResponseException {
        try {
            Message erreur = new Message();
            erreur.ajouterParametre(StructureProtocole.CODE_RETOUR, StructureProtocole.ERREUR_TX_INTERET);
            t.envoyer(erreur);
        } catch (CommunicationException ce) {
            throw new CommunicationResponseException();
        }
    }

    public void envoyerErreurAnnuites() throws CommunicationResponseException {
        try {
            Message erreur = new Message();
            erreur.ajouterParametre(StructureProtocole.CODE_RETOUR, StructureProtocole.ERREUR_ANNUITES);
            t.envoyer(erreur);
        } catch (CommunicationException ce) {
            throw new CommunicationResponseException();
        }
    }

    public void envoyerErreurChoix() throws CommunicationResponseException {
        try {
            Message erreur = new Message();
            erreur.ajouterParametre(StructureProtocole.CODE_RETOUR, StructureProtocole.ERREUR_CHOIX);
            t.envoyer(erreur);
        } catch (CommunicationException ce) {
            throw new CommunicationResponseException();
        }
    }
}
